package com.zelin.dao.dyna;

import com.zelin.dao.UserDao;
import com.zelin.dao.impl.UserDaoImpl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * ------------------------------
 * 功能：JDK动态代理实现
 * 作者：WF
 * 微信：hbxfwf13590332912
 * 创建时间：2021/10/13-14:43
 * ------------------------------
 */
public class UserDaoJDKDynamicProxyImpl implements InvocationHandler {

    //1. 引入目标对象
    private UserDao userDao;
    public UserDaoJDKDynamicProxyImpl(){
        userDao = new UserDaoImpl();
    }
    //2. 生成代理对象
    public UserDao createUserDao(){
        return (UserDao) Proxy.newProxyInstance(userDao.getClass().getClassLoader(),
                userDao.getClass().getInterfaces(),this);
    }

    //3. 调用目标对象的方法
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //3.1 得到方法名
        String name = method.getName();
        //3.2 判断当前调用的方法名是否是query，如果是就添加一个checkSecurity()方法的调用
        if(name.equalsIgnoreCase("query")){
            checkSecurity();
        }
        Object invoke = method.invoke(userDao, args);
        return invoke;
    }

    private void checkSecurity(){
        System.out.println("这是使用JDK的动态代理方式来检查安全性!");
    }
}
